

// 19. 删除链表的倒数第 N 个结点
// https://leetcode.cn/problems/remove-nth-node-from-end-of-list/
// 给你一个链表，删除链表的倒数第 n 个结点，并且返回链表的头结点。

 

// 示例 1：

// 输入：head = [1,2,3,4,5], n = 2
// 输出：[1,2,3,5]

// 示例 2：

// 输入：head = [1], n = 1
// 输出：[]

// 示例 3：

// 输入：head = [1,2], n = 1
// 输出：[1]

 

// 提示：

//     链表中结点的数目为 sz
//     1 <= sz <= 30
//     0 <= Node.val <= 100
//     1 <= n <= sz

 

// 进阶：你能尝试使用一趟扫描实现吗？



/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        vector<ListNode*> vl;
        ListNode* cur = head;
        while(cur != nullptr)
        {
            vl.push_back(cur);
            cur = cur->next;
        }

        int pos = vl.size() - n;
        if(pos > 0)
            vl[pos - 1]->next = vl[pos]->next;
        else
            head = vl[pos]->next;
        
        delete vl[vl.size() - n];

        return head;
    }
};